def test():
    a = 1
    def test2():
        print(a)
    a = 2
    return test2

newFunc = test()

newFunc() # 2

def test2(): # 注意这里是不会报错的，因为只有在函数执行的时候，才会报错，因为错误在函数内部，不执行就不会错误。
    print(www)

print('xxx')

# 因此， 闭包内的环境是执行外部的环境才给与的，外部的环境要全部执行完，才会给 闭包环境。

def test3():
    funcs = []
    for i in range(1, 4):
        def test():
            print(i)
        funcs.append(test)
    return funcs

new_test3 = test3()

new_test3[0]()
new_test3[1]()
new_test3[2]()
# 显然是不对的，因为内部的环境是外部执行完毕后给的

def test3():
    funcs = []
    for i in range(1, 4):
        def test(i):
            def inner():
                print(i)
            return inner
        funcs.append(test(i))
    return funcs

new_test3 = test3()

new_test3[0]()
new_test3[1]()
new_test3[2]()
